#  使用
#  仔细查看注释内容中带括号的内容，根据内容说明来修改配置
#  修改配置完成后，执行make即可
#  如不修改生成路径，则默认生成可执行文件为run
#  
#  注意事项
#  1.本文件只支持所有源文件都在同一目录下
#  

#==========================用户修改区========================

CC=gcc
CFLAGS=-Wall -c
#LDFLAGS=-L./libs 
#LIBS=-lrt
#输出目标名（最后输出的可执行文件名）
TARGET=demo
#输出目标存放的路径（需要输出可执行文件存放的路径）
TARGET_FOLDER=.

#源文件路径(根据实际修改)
SRC_PATH=.

#头文件路径(根据需要增删路径)
INCLUDES=.

#生成.o文件的目录
OBJ_FOLDER=./obj

#定义全局宏(根据需要增删宏)
DEFINES= DEBUG=1
DEFINES+= MODULEDEMOTEST #该宏将编译运行测试代码

#============================================================


SOURCE_FILES= $(wildcard $(SRC_PATH)/*.c)
PURE_SOURCE_FILES= $(notdir $(SOURCE_FILES))

INCLUDE_PREFIX=-I#前缀
ALL_INCLUDES=$(addprefix $(INCLUDE_PREFIX), $(INCLUDES))

#生成.o的文件
OBJ_FILES = $(patsubst %.c,$(OBJ_FOLDER)/%.o,$(PURE_SOURCE_FILES))

DEFINE_PREFIX=-D#前缀
ALL_DEFINES=$(addprefix $(DEFINE_PREFIX), $(DEFINES))

#这块就把源文件编译成o文件,可能是因为目标不是一个确定的内容或者单个内容，所以这里不会被直接执行
$(OBJ_FOLDER)/%.o : $(SRC_PATH)/%.c
	$(CC) $(ALL_DEFINES) $(ALL_INCLUDES) $(LDFLAGS) $(CFLAGS) $< -o $@
$(OBJ_FOLDER)/%.o : $(SRC_PATH)/%.cpp
	$(CC) $(ALL_DEFINES) $(ALL_INCLUDES) $(LDFLAGS) $(CFLAGS) $< -o $@

.PHONY :all clean 

all:prep create

prep:
#如果不存在生成obj的文件夹,则新建
	@if test ! -d $(OBJ_FOLDER); then mkdir $(OBJ_FOLDER); fi	
#如果不存在生成目标的文件夹,则新建	
	@if test ! -d $(TARGET_FOLDER); then mkdir $(TARGET_FOLDER); fi	

create:$(OBJ_FILES)	
#create只是一个执行的节点，后面代表执行这里所需要的条件，这样才会一步步依赖执行上面的.c生成.o 
	$(CC) $(LDFLAGS) -o $(TARGET_FOLDER)/$(TARGET) $(OBJ_FILES) $(LIBS)

show:
	@echo $(OBJ_FILES)

clean:
	rm $(OBJ_FOLDER)/*
	rm $(TARGET_FOLDER)/$(TARGET)



